package com.jiaotong.smart.smartjiaotong.structure;

import java.time.LocalDateTime;
import java.util.List;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;

// 请求、返回类
public class IntersectionStruct {

    @Data
    // 路口基本信息返回结构体
    public static class IntersectionBaseInformationRes {

        // 路口名称
        private String name;

        // 操作模式
        private String operationMode;

        // 系统时间
        private String systemTime;

        // 实时时间
        private String currentTime;

        // 控制模式
        private String controllMode;

        // 路口ID
        private int intersectionID;

        // 周期时长
        private boolean cicyleDuaration;

        // 路口状态
        private boolean intersectionStatus;

        // 运行方案
        private int excutingMode;

        // 步进方式
        private boolean stepMode;

        // 时段类型
        private String bucketTime;

        // 步进时间
        private boolean stepTime;

        // 相位倒计时
        private int phaseCountdown;

        // 第几时段
        private int timePeriod;

        // 相位顺序
        private int phaseSequence;

        // 相位配置
        private boolean phaseConfiguration;

        // 相位总数
        private int phaseCount;

        // 管控编号
        private int controlNumber;

        // 当前相位
        private int currentPhase;

        // 灯色阶段
        private String lightPeriod;

    }

    @Data
    // 路口基本信息请求体
    public static class IntersectionBaseInformationReq {

        // 信号机ID
        public int AnnunciatorID;
    }

    @Data
    // 锁相请求
    public static class IntersectionPhaseLockedReq {

        // 信号机ID
        public int annunciatorID;

        // 控制方式
        public int controllMode;

        // 相位
        public String phase;

        // 操作方式
        public int operationMode;

        // 锁定时长分钟
        public String minute;

        // 锁定时长小时
        public String hours;
    }

    @Data
    // 流向请求
    public static class IntersectionFlowDirectionReq {

        // 信号机ID
        public int annunciatorID;

        // 控制方式
        public int controllMode;

        // 操作方式
        public int operationMode;

        // 锁定时长分钟
        public String minute;

        // 锁定时长小时
        public String hours;
    }

    @Data
    @RequiredArgsConstructor
    // 时间段结构
    public static class IntersectionTimeSeriod {

        // 序号
        private int ID;

        // 是否启用
        @NonNull
        private Integer whetherStart;

        // 开始时段
        @NonNull
        private String startTime;

        // 结束时段
        @NonNull
        private String endTime;

        // 相位方案ID
        @NonNull
        private Integer phaseID;

        // 控制方式
        @NonNull
        private Integer controllMode;
    }

    @Data
    // 设置时间段请求
    public static class SetIntersectionTimeSeriodReq {

        // 星期几
        private String week;

        // 信号机ID
        private int annunciatorID;

        // 方案
        private IntersectionTimeSeriod[] intersectionTimeSeriods;

    }

    @Data
    // 读取时间段请求
    public static class GetIntersectionTimeSeriodReq {

        // 信号机ID
        private int annunciatorID;

        // 周几
        private String week;

    }

    @Data
    @AllArgsConstructor
    // 读取时间返回
    public static class GetIntersectionTimeSeriodRes {

        // 返回的方案
        private List<IntersectionTimeSeriod> IntersectionTimeSeriods;
    }

}
